package entity

import "context"

// NodeTemplateRepository 节点模板仓储接口
// 定义了节点模板查询的标准接口，用于支持工作流路径解析和条件评估
type NodeTemplateRepository interface {
	// QueryNodeTemplateByID 根据ID查询节点模板
	// 参数:
	//   ctx: 上下文对象，用于控制请求生命周期
	//   id: 节点模板ID
	// 返回值:
	//   NodeTemplate: 查询到的节点模板对象
	//   error: 查询过程中的错误，如果节点不存在则返回相应错误
	QueryNodeTemplateByID(ctx context.Context, id string) (NodeTemplate, error)

	// FindNextApprovalNodeRecursive 递归查找下一个审批节点
	// 从指定的节点模板开始，根据条件参数递归查找下一个需要审批的节点模板
	// 参数:
	//   - ctx: 上下文对象
	//   - currentNodeTemplateID: 当前节点模板ID
	//   - conditionParams: 条件参数，用于条件路由判断
	//   - visitedNodes: 已访问的节点集合，用于循环引用检测
	//   - depth: 当前递归深度
	//   - maxDepth: 最大递归深度限制
	// 返回值:
	//   - nextNodeTemplateID: 下一个审批节点模板ID，空字符串表示已到达工作流末尾
	//   - err: 错误信息
	FindNextApprovalNodeRecursive(ctx context.Context, currentNodeTemplateID string, conditionParams map[string]interface{}, visitedNodes map[string]bool, depth, maxDepth int) (nextNodeTemplateID string, err error)
}